﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;

using myTutor.Models;
using WebMatrix.Security;
using Microsoft.Web.Helpers;
using System.Web.Helpers;
using WebMatrix.WebData;
using System.Drawing;
using System.IO;

namespace myTutor.Controllers
{
    [Authorize]
    public partial class AccountController : Controller
    {
        public ActionResult CancelTutor(int id, string returnUrl)
        {
            var tutorToBeCancel = TutorClassFindingRequest.GetTutorClassFindingRequestById(id);
            if (tutorToBeCancel != null && tutorToBeCancel.AuthorId == UserMaster.GetUserByUserName(User.Identity.Name).Id)
            {
                TutorClassFindingRequest.CancelTutor(id);
            }
            if (!string.IsNullOrEmpty(returnUrl))
            {
                return Redirect(returnUrl);
            }
            return RedirectToAction("RegisterFindClassHistory");
        }

        public ActionResult CancelClass(int id, string returnUrl)
        {
            var classToBeCancel = Class.GetClassById(id);
            if (classToBeCancel != null && classToBeCancel.AuthorId == UserMaster.GetUserByUserName(User.Identity.Name).Id)
            {
                Class.CancelClass(id);
            }
            if (!string.IsNullOrEmpty(returnUrl))
            {
                return Redirect(returnUrl);
            }
            return RedirectToAction("RegisterFindTutorHistory");
        }

        public ActionResult RegisterFindClassHistory()
        {
            return View();
        }

        public ActionResult RegisterFindTutorHistory()
        {
            return View();
        }

        public ActionResult CancelTransaction(int id, string returnAction)
        {
            var tranToBeCancel = ClassTutorTransaction.GetTransactionById(id);
            if (tranToBeCancel != null && tranToBeCancel.AuthorId == UserMaster.GetUserByUserName(User.Identity.Name).Id)
            {
                ClassTutorTransaction.CancelTransaction(id);
            }
            return RedirectToAction(returnAction);
        }

        public ActionResult HireTutorHistory(int? classId)
        {
            classId = classId.HasValue ? classId.Value : 0;
            ViewBag.ClassId = classId;
            return View();
        }

        public ActionResult GetClassHistory(int? tutorId)
        {
            tutorId = tutorId.HasValue ? tutorId.Value : 0;
            ViewBag.TutorId = tutorId;
            return View();
        }

        public ActionResult UserProfile()
        {
            return View(UserMaster.GetUserByUserName(User.Identity.Name));
        }

        [HttpPost]
        public ActionResult UserProfile(string provider)
        {
            var model = UserMaster.GetUserByUserName(User.Identity.Name);
            if (!string.IsNullOrEmpty(provider))
            {
                switch (provider.ToLower())
                {
                    case "google": if (!string.IsNullOrEmpty(model.GoogleOpenId))
                            provider = null;
                        break;
                    case "yahoo": if (!string.IsNullOrEmpty(model.YahooOpenId))
                            provider = null;
                        break;
                    case "facebook": if (!string.IsNullOrEmpty(model.FacebookOpenId))
                            provider = null;
                        break;
                    default: provider = null;
                        break;
                }
                if (!string.IsNullOrEmpty(provider))
                {
                    OAuthWebSecurity.RequestAuthentication(provider, "~/Account/ConnectService");
                }
            }
            return View(model);
        }

        public ActionResult ConnectService()
        {
            var model = UserMaster.GetUserByUserName(User.Identity.Name);
            var result = OAuthWebSecurity.VerifyAuthentication();
            if (result != null && !string.IsNullOrEmpty(result.Provider) && result.IsSuccessful)
            {
                switch (result.Provider.ToLower())
                {
                    case "google": model.GoogleOpenId = result.ProviderUserId;
                        break;
                    case "yahoo": model.YahooOpenId = result.ProviderUserId;
                        break;
                    case "facebook": model.FacebookOpenId = result.ProviderUserId;
                        break;
                    default:
                        break;
                }
                Db.db.SaveChanges();
            }
            return RedirectToAction("UserProfile");
        }

        public ActionResult BasicInfo()
        {
            return View(UserMaster.GetUserByUserName(User.Identity.Name));
        }

        [HttpPost]
        public ActionResult BasicInfo(UserMaster model)
        {
            if (ModelState.IsValid)
            {
                if (model.UserProfile.ProvinceId.HasValue && !ProvinceMaster.IsValidProvinceId(model.UserProfile.ProvinceId.Value))
                {
                    ModelState.AddModelError("UserProfile.ProvinceId", "Tỉnh/Thành phố bạn chọn hiện không khả dụng.");
                }
                else if (model.UserProfile.DistrictId.HasValue && !DistrictMaster.IsValidDistrictId(model.UserProfile.DistrictId.Value))
                {
                    ModelState.AddModelError("UserProfile.DistrictId", "Huyện/Quận bạn chọn hiện không khả dụng.");
                }
                else
                {
                    try
                    {
                        if (model.CustomImageFileName != null && model.CustomImageFileName.ContentLength > 0)
                        {
                            string imageFileName = model.UserProfile.ImageFileName;
                            imageFileName = string.IsNullOrEmpty(imageFileName) ? ("Profile-" + Guid.NewGuid().ToString() + ".png") : imageFileName;
                            Bitmap original = Bitmap.FromStream(model.CustomImageFileName.InputStream) as Bitmap;

                            Bitmap resizedBitmap = new Bitmap(150, 200);
                            Graphics g = Graphics.FromImage(resizedBitmap as Image);
                            g.DrawImage(original, 0, 0, 150, 200);

                            string imagePath = Path.Combine(Server.MapPath("~/Files/Profiles/"), imageFileName);
                            resizedBitmap.Save(imagePath, System.Drawing.Imaging.ImageFormat.Png);
                            model.UserProfile.ImageFileName = imageFileName;
                        }
                        UserMaster.UpdateBasicInfo(model);
                    }
                    catch
                    {
                        ModelState.AddModelError("", "Cố sự cố xảy ra trong khi lưu trữ ảnh, vui lòng thử lại sau.");
                        return View(model);
                    }
                }
            }
            return RedirectToAction("UserProfile", "Account");
        }

        public ActionResult Education()
        {
            return View();
        }

        public ActionResult DeleteEducation(int id)
        {
            UserEducation.Delete(id);
            return RedirectToAction("Education", "Account");
        }

        [HttpPost]
        public ActionResult Education(UserEducation uEducation)
        {
            if (ModelState.IsValid)
            {
                if (uEducation.CustomStartYear < (DateTime.Now.Year - 60) || uEducation.CustomStartYear > DateTime.Now.Year)
                {
                    ModelState.AddModelError("CustomStartYear", "Năm bắt đầu phải nằm trong khoảng " + (DateTime.Now.Year - 60) + " đến " + DateTime.Now.Year + ".");
                    return View(uEducation);
                }
                if (uEducation.CustomGraduatedYear < (DateTime.Now.Year - 60) || uEducation.CustomGraduatedYear > (DateTime.Now.Year + 10))
                {
                    ModelState.AddModelError("CustomGraduatedYear", "Năm bắt đầu phải nằm trong khoảng " + (DateTime.Now.Year - 60) + " đến " + (DateTime.Now.Year + 10) + ".");
                    return View(uEducation);
                }
                if (uEducation.CustomStartYear > uEducation.CustomGraduatedYear)
                {
                    ModelState.AddModelError("CustomGraduatedYear", "Năm bắt đầu phải nhỏ hơn năm tốt nghiệp.");
                    return View(uEducation);
                }
                UserEducation.AddNew(uEducation, UserMaster.GetUserByUserName(User.Identity.Name).Id);
            }
            return RedirectToAction("Education", "Account");
        }

        public ActionResult Experience()
        {
            return View();
        }

        public ActionResult DeleteExperience(int id)
        {
            ProfileExperience.Delete(id);
            return RedirectToAction("Experience", "Account");
        }

        [HttpPost]
        public ActionResult Experience(ProfileExperience ex)
        {
            if (ModelState.IsValid)
            {
                if (DateTime.Parse(ex.CustomStartDate).Year < (DateTime.Now.Year - 60) || DateTime.Parse(ex.CustomStartDate).Year > DateTime.Now.Year)
                {
                    ModelState.AddModelError("CustomOrganizationName", "Năm bắt đầu phải nằm trong khoảng " + (DateTime.Now.Year - 60) + " đến " + DateTime.Now.Year + ".");
                    return View(ex);
                }

                if (ex.EndDate != null)
                {
                    if (DateTime.Parse(ex.CustomEndDate).Year < (DateTime.Now.Year - 60) || DateTime.Parse(ex.CustomEndDate).Year > DateTime.Now.Year)
                    {
                        ModelState.AddModelError("CustomOrganizationName", "Năm bắt đầu phải nằm trong khoảng " + (DateTime.Now.Year - 60) + " đến " + DateTime.Now.Year + ".");
                        return View(ex);
                    }
                    if (DateTime.Parse(ex.CustomStartDate) > DateTime.Parse(ex.CustomEndDate))
                    {
                        ModelState.AddModelError("CustomOrganizationName", "Năm bắt đầu phải nhỏ hơn năm kết thúc.");
                        return View(ex);
                    }
                }
                ProfileExperience.AddNew(ex, UserMaster.GetUserByUserName(User.Identity.Name).Id);
            }
            return RedirectToAction("Experience", "Account");
        }

        //
        // GET: /Account/Login

        [AllowAnonymous]
        [NonAuthorize]
        public ActionResult Login(string returnUrl)
        {
            ViewBag.ReturnUrl = returnUrl;
            return View();
        }

        //
        // POST: /Account/Login

        [AllowAnonymous]
        [NonAuthorize]
        [HttpPost]
        public ActionResult Login(LoginModel model, string returnUrl)
        {
            string oauthProvider = Request.Form["provider"];
            if (!string.IsNullOrEmpty(oauthProvider))
            {
                OAuthWebSecurity.RequestAuthentication(oauthProvider, "~/Account/Register?returnUrl=" + returnUrl);
            }
            if (ModelState.IsValid)
            {
                if (UserMaster.CheckUser(model.UserName, model.Password))
                {
                    if (UserMaster.ValidateUser(model.UserName, model.Password))
                    {
                        return SetLogin(model.UserName, model.RememberMe, returnUrl);
                    }
                    else if (UserMaster.IsUnconfirmedUser(model.UserName))
                    {
                        return RedirectToAction("Info", "Shared", new { title = "Đăng nhập thất bại", message = "Tài khoản của bạn chưa được kích hoạt, hãy kiểm tra lại email. Nếu bạn chưa nhận được email kích hoạt tài khoản, hãy làm theo các bước hướng dẫn sau để nhận lại mã kích hoạt.", returnPage = "trang Nhận mã kích hoạt", returnUrl = "/Account/GetConfirmToken" });
                    }
                    else
                    {
                        return RedirectToAction("Info", "Shared", new { title = "Đăng nhập thất bại", message = "Bạn không thể sử dụng tài khoản này để đăng nhập vì tài khoản này đã bị tạm ngừng hoạt động hoặc đã bị xóa vĩnh viễn.", returnPage = "trang Đăng nhập", returnUrl = "/Account/Login" });
                    }
                }
                else
                {
                    ModelState.AddModelError("", "Tài khoản hoặc mật khẩu không chính xác.");
                }
            }

            // If we got this far, something failed, redisplay form
            ViewBag.ReturnUrl = returnUrl;
            return View(model);
        }

        private ActionResult SetLogin(string userName, bool rememberMe, string returnUrl)
        {
            FormsAuthentication.SetAuthCookie(userName, rememberMe);
            if (Url.IsLocalUrl(returnUrl))
            {
                return Redirect(returnUrl);
            }
            else
            {
                if (UserMaster.IsInRole(userName, "1"))
                {
                    return RedirectToAction("Index", "Admin");
                }
                return RedirectToAction("Index", "Home");
            }
        }

        //
        // GET: /Account/LogOff

        public ActionResult LogOff()
        {
            FormsAuthentication.SignOut();

            return RedirectToAction("Index", "Home");
        }

        //
        // GET: /Account/Register

        [AllowAnonymous]
        [NonAuthorize]
        public ActionResult Register(string returnUrl)
        {
            var result = OAuthWebSecurity.VerifyAuthentication();
            if (result!=null && !string.IsNullOrEmpty(result.Provider))
            {
                if (result.IsSuccessful)
                {
                    UserMaster user = UserMaster.GetUserByProvider(result.Provider, result.ProviderUserId);
                    if (user != null)
                    {
                        if (UserMaster.ValidateUserByProvider(result.Provider, result.ProviderUserId))
                        {
                            return SetLogin(user.UserName, false, returnUrl);
                        }
                        else
                        {
                            return RedirectToAction("Info", "Shared", new { title = "Đăng nhập thất bại", message = "Bạn không thể sử dụng tài khoản này để đăng nhập vì tài khoản này đã bị tạm ngừng hoạt động hoặc đã bị xóa vĩnh viễn.", returnPage = "trang Đăng nhập", returnUrl = "/Account/Login" });
                        }
                    }
                    RegisterModel model = new RegisterModel();
                    model.UserName = result.UserName.Remove(result.UserName.IndexOf('@'));
                    model.Email = result.UserName;
                    model.Provider = result.Provider;
                    model.ProviderUserId = result.ProviderUserId;
                    ViewBag.ReturnUrl = returnUrl;
                    return View(model);
                }
                else
                {
                    return RedirectToAction("Login");
                }
            }
            ViewBag.ReturnUrl = returnUrl;
            return View();
        }

        //
        // POST: /Account/Register

        [AllowAnonymous]
        [NonAuthorize]
        [HttpPost]
        public ActionResult Register(RegisterModel model, string returnUrl)
        {
            ViewBag.ReturnUrl = returnUrl;
            if (ModelState.IsValid)
            {
                if (!ReCaptcha.Validate(Config.GetRecaptchaPrivateKey()))
                {
                    ModelState.AddModelError("", "Mã xác nhận không đúng.");
                    return View(model);
                }

                if (model.UserType != "2" && model.UserType != "3")
                {
                    ModelState.AddModelError("","Loại tài khoản không hợp lệ.");
                    return View(model);
                }

                bool requireEmailConfirmation = Config.GetRequireEmailConfirmation() && !string.IsNullOrEmpty(WebMail.SmtpServer);
                string status = "1";
                string token = null;
                if (requireEmailConfirmation)
                {
                    status = "0";
                    token = Guid.NewGuid().ToString();
                }

                // Attempt to register the user
                MembershipCreateStatus createStatus;
                UserMaster user = UserMaster.CreateUser(model.Email, model.UserName, model.Provider, model.ProviderUserId, model.Password, model.UserType, status, token,out createStatus);

                if (createStatus == MembershipCreateStatus.Success)
                {
                    if (requireEmailConfirmation)
                    {
                        return SendConfirmToken(token, user, true);
                    }
                    else
                    {
                        // Navigate back to the homepage and exit
                        return SetLogin(user.UserName, false, returnUrl);
                    }
                }
                else
                {
                    ModelState.AddModelError("", ErrorCodeToString(createStatus));
                }
            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }

        private ActionResult SendConfirmToken(string token, UserMaster user, bool forFirstTime)
        {
            try
            {
                var hostUrl = Request.Url.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);
                var confirmationUrl = hostUrl + VirtualPathUtility.ToAbsolute("~/Account/Confirm?confirmationCode=" + HttpUtility.UrlEncode(token));
                Config.SetupWebmail();
                WebMail.Send(
                    to: user.Email,
                    subject: "Vui lòng kích hoạt tài khoản của bạn tại " + Config.GetFullSiteName(),
                    body: "Mã kích hoạt của bạn là: " + token + ". Nhấp vào đường dẫn này: <a href=\"" + confirmationUrl + "\">" + confirmationUrl + "</a> để kích hoạt tài khoản của bạn."
                );

                // Thank the user for registering and let them know an email is on its way
                return RedirectToAction("Info", "Shared", new { title = "Cảm ơn", message = "Cảm ơn bạn đã sử dụng dịch vụ của chúng tôi. Hãy kích hoạt mail xác nhận để sử dụng tài khoản của bạn.", returnPage = "Trang chủ", returnUrl = "/" });
            }
            catch
            {
                if (forFirstTime)
                {
                    return RedirectToAction("Info", "Shared", new { title = "Gởi mã xác nhận không thành công", message = "Tài khoản của bạn đã được tạo tuy nhiên do sự cố kỹ thuật nên hiện tại chúng tôi chưa gởi được email xác nhận cho bạn.", returnPage = "Trang nhận lại mã xác nhận để giúp lấy mã kích hoạt tài khoản cho bạn", returnUrl = "/Account/GetConfirmToken" });
                }
                else
                {
                    return RedirectToAction("Info", "Shared", new { title = "Gởi mã xác nhận không thành công", message = "Rất tiếc vì đang có sự cố kỹ thuật nên hệ thống không thể gởi lại mã xác nhận cho bạn. Hãy thử lại vào lần sau!", returnPage = "Trang chủ", returnUrl = "/" });
                }
            }
        }

        [AllowAnonymous]
        [NonAuthorize]
        public ActionResult Confirm(string confirmationCode)
        {
            if (UserMaster.ActiveByConfirmToken(confirmationCode))
            {
                return RedirectToAction("Info", "Shared", new { title = "Kích hoạt tài khoản thành công!", message = "Cảm ơn bạn đã sử dụng dịch vụ của chúng tôi. Thông tin kích hoạt đã được ghi nhận, hãy đăng nhập để bắt đầu sử dụng các dịch vụ của chúng tôi.", returnPage = "trang Đăng nhập", returnUrl="/Account/Login" });
            }
            return RedirectToAction("Info", "Shared", new { title = "Kích hoạt thất bại!", message = "Thông tin kích hoạt của bạn không đúng hoặc đã được sử dụng.", returnPage = "Trang chủ", returnUrl = "/" });
        }

        [AllowAnonymous]
        [NonAuthorize]
        public ActionResult ForgetPassword()
        {
            return View();
        }

        [AllowAnonymous]
        [NonAuthorize]
        [HttpPost]
        public ActionResult ForgetPassword(ConfirmModel model)
        {
            if (ModelState.IsValid)
            {
                UserMaster user = UserMaster.GetUserByEmail(model.Email);
                if (user != null)
                {
                    bool canSendEmail = !string.IsNullOrEmpty(WebMail.SmtpServer);
                    try
                    {
                        string token = Guid.NewGuid().ToString();
                        DateTime expired = DateTime.Now.AddDays(1);
                        var hostUrl = Request.Url.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);
                        var confirmationUrl = hostUrl + VirtualPathUtility.ToAbsolute("~/Account/ResetPassword?confirmationCode=" + HttpUtility.UrlEncode(token));
                        Config.SetupWebmail();
                        WebMail.Send(
                            to: user.Email,
                            subject: "Mật khẩu mới của bạn tại " + Config.GetFullSiteName(),
                            body: "Mật khẩu mới của bạn là: " + token + ". Thời gian hết hạn: " + expired.ToString("dd/MM/yyyy HH:mm:ss") + ". Nhấp vào đường dẫn này: <a href=\"" + confirmationUrl + "\">" + confirmationUrl + "</a> để kích hoạt mật khẩu mới. Lưu ý: Nếu bạn chưa kích hoạt mật khẩu mới này thì mật khẩu cũ của bạn vẫn khả dụng."
                        );

                        user.ResetPasswordToken = token;
                        user.ResetPasswordExpired = DateTime.Now.AddDays(1);

                        Db.db.SaveChanges();

                        // Thank the user for registering and let them know an email is on its way
                        return RedirectToAction("Info", "Shared", new { title = "Mật khẩu mới đã được gởi thành công!", message = "Thông tin để phục hồi mật khẩu của bạn đã được gởi đến e-mail lúc bạn đăng ký tài khoản.", returnPage = "Trang chủ", returnUrl = "/" });
                    }
                    catch
                    {
                        return RedirectToAction("Info", "Shared", new { title = "Gởi mật khẩu mới không thành công", message = "Rất tiếc vì đang có sự cố kỹ thuật nên tạm thời hệ thống không thể gởi mật khẩu mới cho bạn. Hãy thử lại vào lần sau!", returnPage = "Trang chủ", returnUrl = "/" });
                    }
                }
                else
                {
                    ModelState.AddModelError("", "E-mail không tồn tại");
                }
            }
            return View(model);
        }


        [AllowAnonymous]
        [NonAuthorize]
        public ActionResult GetConfirmToken()
        {
            return View();
        }

        [AllowAnonymous]
        [NonAuthorize]
        [HttpPost]
        public ActionResult GetConfirmToken(ConfirmModel model)
        {
            if (ModelState.IsValid)
            {
                UserMaster user = UserMaster.GetUserByEmail(model.Email);
                if (user != null && UserMaster.IsUnconfirmedUser(user.UserName))
                {
                    bool canSendEmail = !string.IsNullOrEmpty(WebMail.SmtpServer);
                    string token = Guid.NewGuid().ToString();
                    user.ConfirmToken = token;
                    Db.db.SaveChanges();
                    return SendConfirmToken(token, user, false);
                }
                else
                {
                    ModelState.AddModelError("", "E-mail không tồn tại hoặc tài khoản của bạn đã được kích hoạt");
                }
            }
            return View(model);
        }

        [AllowAnonymous]
        [NonAuthorize]
        public ActionResult ResetPassword(string confirmationCode)
        {
            string newPassword = UserMaster.ResetPasswordByToken(confirmationCode);
            if (newPassword != null)
            {
                return RedirectToAction("Info", "Shared", new { title = "Thay đổi mật khẩu thành công!", message = "Mật khẩu mới đã được cập nhật vào hồ sơ của bạn. Hãy đăng nhập lại để sử dụng các dịch vụ của chúng tôi.", returnPage = "trang Đăng nhập", returnUrl = "/Account/Login" });
            }
            return RedirectToAction("Info", "Shared", new { title = "Thay đổi mật khẩu thất bại!", message = "Thông tin để phục hồi mật khẩu của bạn không đúng hoặc đã hết hạn hoặc đã được sử dụng.", returnPage = "Trang chủ", returnUrl = "/" });
        }

        //
        // GET: /Account/ChangePassword

        public ActionResult ChangePassword()
        {
            return View();
        }

        //
        // POST: /Account/ChangePassword

        [HttpPost]
        public ActionResult ChangePassword(ChangePasswordModel model)
        {
            if (ModelState.IsValid)
            {
                // ChangePassword will throw an exception rather
                // than return false in certain failure scenarios.
                bool changePasswordSucceeded;
                try
                {
                    UserMaster currentUser = UserMaster.GetUserByUserName(User.Identity.Name);
                    changePasswordSucceeded = UserMaster.ChangePassword(currentUser.UserName, model.OldPassword, model.NewPassword);
                }
                catch (Exception)
                {
                    changePasswordSucceeded = false;
                }

                if (changePasswordSucceeded)
                {
                    return RedirectToAction("ChangePasswordSuccess");
                }
                else
                {
                    ModelState.AddModelError("", "Mật khẩu hiện tại không đúng hoặc mật khẩu mới không phù hợp.");
                }
            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }

        //
        // GET: /Account/ChangePasswordSuccess

        public ActionResult ChangePasswordSuccess()
        {
            return RedirectToAction("Info", "Shared", new { title = "Thay đổi mật khẩu thành công!", message = "Mật khẩu mới đã được cập nhật vào hồ sơ của bạn.", returnPage = "Trang cá nhân", returnUrl = "/Account/Profile" });
        }

        private IEnumerable<string> GetErrorsFromModelState()
        {
            return ModelState.SelectMany(x => x.Value.Errors.Select(error => error.ErrorMessage));
        }

        #region Status Codes
        private static string ErrorCodeToString(MembershipCreateStatus createStatus)
        {
            // See http://go.microsoft.com/fwlink/?LinkID=177550 for
            // a full list of status codes.
            switch (createStatus)
            {
                case MembershipCreateStatus.DuplicateProviderUserKey:
                    return "Có lỗi trong quá trình phát sinh mã. Vui lòng thử lại sau.";

                case MembershipCreateStatus.DuplicateUserName:
                    return "Tên tài khoản này đã được đăng ký. Vui lòng sử dụng tên khác.";

                case MembershipCreateStatus.DuplicateEmail:
                    return "E-mail này đã được đăng ký. Vui lòng chọn e-mail khác.";

                case MembershipCreateStatus.InvalidPassword:
                    return "Mật khẩu không đúng. Vui lòng kiểm tra lại.";

                case MembershipCreateStatus.InvalidEmail:
                    return "E-mail không đúng. Vui lòng kiểm tra lại";

                case MembershipCreateStatus.InvalidAnswer:
                    return "Câu trả lời bảo mật không đúng. Vui lòng kiểm tra lại.";

                case MembershipCreateStatus.InvalidQuestion:
                    return "Câu hỏi bảo mật không đúng. Vui lòng kiểm tra lại.";

                case MembershipCreateStatus.InvalidUserName:
                    return "Tên tài khoản không đúng. Vui lòng kiểm tra lại.";

                case MembershipCreateStatus.ProviderError:
                    return "Hệ thống đáp ứng bảo mật xảy ra lỗi. Vui lòng kiểm tra thông tin nhập vào và thử lại. Nếu lỗi này còn tiếp tục xảy ra, Vui lòng liên hệ với Quản trị hệ thống.";

                case MembershipCreateStatus.UserRejected:
                    return "Thông tin yêu cầu bị từ chối. Vui lòng kiểm tra thông tin nhập vào và thử lại. Nếu lỗi này còn tiếp tục xảy ra, Vui lòng liên hệ với Quản trị hệ thống.";

                default:
                    return "Lỗi không xác định. Vui lòng kiểm tra thông tin nhập vào và thử lại. Nếu lỗi này còn tiếp tục xảy ra, Vui lòng liên hệ với Quản trị hệ thống.";
            }
        }
        #endregion
    }
}
